#ifndef __LINEAR_H__
#define __LINEAR_H__

#include "ProcessingUnit.h"

class Linear {
public:
    Linear() {};
    Linear(const int input_size)
        : _input_size(input_size)
        , _w(input_size)
        , _b(1)
    {
    }
    void process(const Eigen::VectorXf& input, Eigen::VectorXf& output)
    {
        output = _w.transpose() * input + _b;
    }
    void setParams(const float* w, float b)
    {
        for (int i = 0; i < _input_size; i++) {
            _w(i) = w[i];
        }
        _b(0) = b;
    }

protected:
    int _input_size;
    Eigen::VectorXf _w;
    Eigen::VectorXf _b;
};

#endif